Hey,
ich versuche seit zwei Tagen irgendwie mein kleines Nodejs Programm zum laufen zu bekommen.
Ziel ist mit Hilfe von youtube-dl (Python) einer Menge Proxies und requests JS erstmal 1000 "Videos" von Streamcloud zu saugen.
Meine Applikation beginnt mit dem Import der benötigten Libs
gefolgt vom laden der proxies aus einer text dateiCode:var fs = require('fs'); fs.debug = true; const request = require('request'); request.debug = true; var glob = require("glob"); //const { spawn } = require('child_process'); var spawn = require('child_process').spawnSync; const url = require('url'); var getSlug = require('speakingurl'); var path = require('path'); var async = require("async");
Es folgt eine einfache Funktion die mir einen Proxie zurückgibtCode:var proxies = []; var proxyList = fs.readFileSync('proxies.txt', 'utf8'); proxyList.split(/\r?\n/).forEach(function(proxy){ let $proxy = {}; $proxy = proxy.replace('name', 'SuperVIP*****'); $proxy = $proxy.replace('pass', 'Df****'); proxies.push($proxy); });
Es folgt die Funktion download die den direkt download link ermittelt und den download durchführtCode:function proxy(){ return proxies.shift(); }
Diese Funktion funktionierte (in irgend einer Version) mal, aber nur wenn man den Download einzeln durchführte.Code:function download(link, savepath){ $proxy = proxy(); var child = spawn('youtube-dl' , ['-g', "--proxy", $proxy, link]); console.log('stdout here: \n' + child.stdout); console.log('stderr here: \n' + child.stderr); $output = child.stdout.toString().replace(/\s/g, ''); if(url.parse($output)){ //request.defaults({'proxy': $proxy}); let r = request({ 'url': $output, 'proxy': $proxy, 'rejectUnauthorized': false }); r.on('error', function(err) { console.log(err) }) r.on('response', function (res) { console.log(savepath+path.extname($output)); res.pipe(fs.createWriteStream(savepath+path.extname($output),{flags: 'w+'})); }); r.end(); /* var file = fs.createWriteStream(savepath+path.extname($output), {flags:'w+',mode: 0666}); file.on('error', function(err){ console.log(err); }); request .get($output) .on('error', function(err) { console.log(err) }) .on('data', function(chunk){ file.write(chunk); }) .on('end', function(){ file.close(); }) .end(); */ return savepath+path.extname($output); } }
Ich hatte es irgendwann am Tag mal so probiert
Code:glob("input/*.json", function(err, files) { if(err) { console.log("cannot read the folder, something goes wrong with glob", err); } files.forEach(function(file){ var entity = JSON.parse(fs.readFileSync(file, 'utf8')); entity.paths = []; if(entity.links['streamcloud.eu'].length == 1){ $savepath = path.resolve(__dirname, 'storage/'+getSlug(entity.title, {lang: 'de'})); $path = download(entity.links['streamcloud.eu'][0], $savepath); entity.paths.push($path); } fs.writeFileSync(file.replace('input', 'output'), JSON.stringify(entity), 'utf8'); }); });
Jetzt bin ich soweit das mir bekannt ist das requestjs in einer Schleife nicht funktioniert. Irgendwas mit Sockets oder so.
Gut gibt ja async.js
Code:var q = []; glob("input/*.json", function(err, files) { if(err) { console.log("cannot read the folder, something goes wrong with glob", err); } files.forEach(function(file){ var entity = JSON.parse(fs.readFileSync(file, 'utf8')); entity.paths = []; entity.path = file; entity.download = {path: ''}; if(entity.links['streamcloud.eu'].length == 1){ entity.download.path = path.resolve(__dirname, 'storage/'+getSlug(entity.title, {lang: 'de'})+'.mp4'); //console.log(entity.download.path); entity.url = entity.links['streamcloud.eu'][0]; //$path = download(entity.links['streamcloud.eu'][0], $savepath); //entity.paths.push($path); fs.writeFileSync(file.replace('input', 'output'), JSON.stringify(entity), 'utf8'); q.push(requestApi(entity)); } }); });Code:var requestApi = function(data, next){ console.log('job triggered'); $proxy = proxy(); var child = spawn('youtube-dl' , ['-g', "--proxy", $proxy, data.url]); console.log('stdout here: \n' + child.stdout); console.log('stderr here: \n' + child.stderr); $output = child.stdout.toString().replace(/\s/g, ''); if(!url.parse($output)){ next(); } request.defaults({'proxy': $proxy}); var file = fs.createWriteStream(data.download.path, {flags:'w+',mode: 0666}); request .get($output) .on('error', function(err) { console.log(err); next(err); }) .on('data', function(chunk){ file.writeSync(chunk); }) .on('end', function(){ file.close(); next(); }) .end(); };Code:async.series(q, function(err, data){ console.log(err); });
Der Part DDL ermitteln funktioniert
Request wird auch gefeuert aber es wird nicht geladen.Code:stderr here: REQUEST { uri: 'http://stor8.streamcloud.eu:8080/5hv75o2easoax3ptxzjijq77vum52hf wnab4mmoq6rbxvjtmwc3a4g36r4/video.mp4', method: 'GET', callback: undefined } REQUEST make request http://stor8.streamcloud.eu:8080/5hv75o2easoax3ptxzjijq77vu m52hfwnab4mmoq6rbxvjtmwc3a4g36r4/video.mp4 job triggered ^C C:\src\downloader>
Hat jemand irgendwie Vorschläge.
Ziel. Den Downloader zum laufen bekommen.
Btw. Wieso kann man bei streamcloud nicht einfach fremdlinks importieren wie bei openload?




Zitieren